home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 24
/
Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso
/
Aminet
/
comm
/
mail
/
Mutt089src.lha
/
Mutt-0.89i-AMIGA
/
src
/
copy.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-01-28
|
4KB
|
140 lines
/*
* Copyright (C) 1996-8 Michael R. Elkins <me@cs.hmc.edu>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "mutt.h"
#include "mailbox.h"
#include "mx.h"
#include "copy.h"
#include <string.h>
#include <stdlib.h>
/* make a copy of a message
*
* fpout where to write output
* fpin where to get input
* hdr header of message being copied
* body structure of message being copied
* flags
* M_CM_NOHEADER don't copy header
* M_CM_PREFIX quote header and body
* M_CM_DECODE decode message body to text/plain
* M_CM_DISPLAY displaying output to the user
* chflags flags to mutt_copy_header()
*/
int
_mutt_copy_message (FILE *fpout, FILE *fpin, HEADER *hdr, BODY *body,
int flags, int chflags)
{
STATE s;
if ((flags & M_CM_NOHEADER) == 0)
{
if (flags & M_CM_PREFIX)
chflags |= CH_PREFIX;
if (mutt_copy_header (fpin, hdr, fpout, chflags) == -1)
return -1;
}
if (flags & M_CM_DECODE)
{
/* now make a text/plain version of the message */
memset (&s, 0, sizeof (STATE));
s.fpin = fpin;
s.fpout = fpout;
if (flags & M_CM_PREFIX)
s.prefix = Prefix;
if (flags & M_CM_DISPLAY)
s.flags |= M_DISPLAY;
#ifdef _PGPPATH
if (flags & M_CM_VERIFY)
s.flags |= M_VERIFY;
#endif
mutt_body_handler (body, &s);
}
else
{
fseek (fpin, body->offset, 0);
if (mutt_copy_bytes (fpin, fpout, body->length) == -1)
return -1;
}
return 0;
}
int
mutt_copy_message (FILE *fpout, CONTEXT *src, HEADER *hdr, int flags,
int chflags)
{
MESSAGE *msg;
int r;
if ((msg = mx_open_message (src, hdr->msgno)) == NULL)
return -1;
r = _mutt_copy_message (fpout, msg->fp, hdr, hdr->content, flags, chflags);
mx_close_message (&msg);
return r;
}
/* appends a copy of the given message to a mailbox
*
* dest destination mailbox
* fpin where to get input
* src source mailbox
* hdr message being copied
* body structure of message being copied
* flags mutt_copy_message() flags
* chflags mutt_copy_header() flags
*/
int
_mutt_append_message (CONTEXT *dest, FILE *fpin, CONTEXT *src, HEADER *hdr,
BODY *body, int flags, int chflags)
{
MESSAGE *msg;
int r;
if ((msg = mx_open_new_message (dest, hdr, (src->magic == M_MBOX || src->magic == M_MMDF) ? 0 : M_ADD_FROM)) == NULL)
return -1;
if (dest->magic == M_MBOX || dest->magic == M_MMDF)
chflags |= CH_FROM;
chflags |= (dest->magic == M_MAILDIR ? CH_NOSTATUS : CH_UPDATE);
r = _mutt_copy_message (msg->fp, fpin, hdr, body, flags, chflags);
mx_close_message (&msg);
return r;
}
int
mutt_append_message (CONTEXT *dest, CONTEXT *src, HEADER *hdr, int cmflags,
int chflags)
{
MESSAGE *msg;
int r;
if ((msg = mx_open_message (src, hdr->msgno)) == NULL)
return -1;
r = _mutt_append_message (dest, msg->fp, src, hdr, hdr->content, cmflags, chflags);
mx_close_message (&msg);
return r;
}